

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Lenovo
 * Date: 2025-04-12
 * Time: 20:00
 */

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {

        // 基础拆分（默认使用正则表达式，逗号后带空格）
        String colors = "red, green, blue, yellow";
        String[] colorArr1 = colors.split(","); // 按逗号拆分，保留空格
        System.out.println("基础拆分结果：" + Arrays.toString(colorArr1));
        // 输出：[red, green, blue, yellow]（每个元素前有空格）

        // limit参数演示（控制拆分次数与保留空元素）
        String data = "one,two,three,four";
        String[] arr1 = data.split(",", 2);//限制拆分次数为2次（得到2个元素）
        System.out.println(Arrays.toString(arr1));
        // 输出：[one, two,three,four]

        String csv = ",a,b,c,";
        String[] arr2 = csv.split(",", 0);//limit=0时丢弃末尾空元素
        System.out.println(Arrays.toString(arr2));
        // 输出：[, a, b, c]

        String[] arr3 = csv.split(",", -1);//limit=-1时保留所有空元素
        System.out.println(Arrays.toString(arr3));
        // 输出：[, a, b, c, ]


        // 默认limit行为（等价于limit=0）
        String defLimit = "a,b,c,,,";
        String[] defArr = defLimit.split(",");//默认丢弃尾部连续空元素
        System.out.println("\n默认limit拆分：" + Arrays.toString(defArr));
        // 输出：[a, b, c]（尾部空元素被丢弃）

        //保留空值
        String emptyTest = "test1,,test2,test3,,,";
        String[] emptyArr = emptyTest.split(",", -1);//保留所有空元素
        System.out.println("\n保留空值的拆分（索引显示）：");
        for (int i = 0; i < emptyArr.length; i++) {
            System.out.println(i + ": [" + emptyArr[i] + "]");
        }
        /*输出:
        保留空值的拆分（索引显示）：
        0: [test1]
        1: []
        2: [test2]
        3: [test3]
        4: []
        5: []
        6: []
*/

        //限制拆分次数
        String log = "2029-08-20 16:30:00 INFO System started";
        String[] logParts = log.split(" ", 3);//拆分3次得到3个元素
        System.out.println("\n带限制的拆分：");
        System.out.println("日期：" + logParts[0]);
        System.out.println("时间：" + logParts[1]);
        System.out.println("消息：" + logParts[2]);
        /*
        输出：
        带限制的拆分：
        日期：2029-08-20
        时间：16:30:00
        消息：INFO System started*/

        // 复杂分隔符，正则表达式拆分（运算符作为分隔符）
        String equation = "a + b * c - d / e";
        String[] tokens = equation.split("[+*/-]");// 使用字符类匹配运算符
        System.out.println(Arrays.toString(tokens));
        // 输出：[a ,  b ,  c ,  d ,  e] （注意运算符前后的空格被保留）

        // 特殊字符转义
        String ip = "123.168.1.1";
        String[] ipParts = ip.split("\\.");//正则中需转义点号
        System.out.println("\nIP地址拆分：" + Arrays.toString(ipParts));
        // 输出：IP地址拆分：[123, 168, 1, 1],注意：运算符被拆分，但前后空格保留

        // 包含换行符的拆分
        String multiLine = "line1\nline2\r\nline3";
        String[] lines = multiLine.split("\\R");//统一处理不同操作系统换行符
        System.out.println("多行文本拆分：" + Arrays.toString(lines));
        // 输出：[line1, line2, line3]
    }
}
